#!/bin/bash

# 服务器端口3000访问问题综合诊断脚本
echo "🔧 AI Daily 服务器访问问题诊断"
echo "=================================="

PROJECT_PATH="/root/ai-daily"
cd $PROJECT_PATH

echo "📋 1. 检查服务进程状态"
echo "=== 前端进程 ==="
ps aux | grep -E '(vite|node)' | grep -v grep || echo "❌ 没有前端进程运行"

echo ""
echo "=== 后端进程 ==="
ps aux | grep uvicorn | grep -v grep || echo "❌ 没有后端进程运行"

echo ""
echo "📋 2. 检查端口监听状态"
echo "=== 端口监听情况 ==="
ss -tlnp | grep -E ':(3000|8001)' || echo "❌ 没有服务监听相关端口"

echo ""
echo "📋 3. 检查服务绑定接口"
if ss -tlnp | grep -q '127.0.0.1:3000'; then
    echo "⚠️  前端服务绑定到 127.0.0.1 (仅本地访问)"
elif ss -tlnp | grep -q '0.0.0.0:3000'; then
    echo "✅ 前端服务已正确绑定到 0.0.0.0 (允许外部访问)"
else
    echo "❌ 前端服务未运行或端口未监听"
fi

if ss -tlnp | grep -q '127.0.0.1:8001'; then
    echo "⚠️  后端服务绑定到 127.0.0.1 (仅本地访问)"
elif ss -tlnp | grep -q '0.0.0.0:8001'; then
    echo "✅ 后端服务已正确绑定到 0.0.0.0 (允许外部访问)"
else
    echo "❌ 后端服务未运行或端口未监听"
fi

echo ""
echo "📋 4. 测试本地连接"
curl -I http://localhost:3000 2>/dev/null && echo "✅ 前端本地连接正常" || echo "❌ 前端本地连接失败"
curl -I http://localhost:8001 2>/dev/null && echo "✅ 后端本地连接正常" || echo "❌ 后端本地连接失败"

echo ""
echo "📋 5. 检查防火墙状态"
# 检查 iptables
if command -v iptables >/dev/null 2>&1; then
    echo "=== iptables 规则 ==="
    iptables -L INPUT -n | grep -E "(3000|8001|ACCEPT|DROP)" || echo "没有发现相关防火墙规则"
fi

# 检查 firewalld
if systemctl is-active --quiet firewalld 2>/dev/null; then
    echo "=== firewalld 状态 ==="
    firewall-cmd --list-ports | grep -E "(3000|8001)" || echo "防火墙未开放3000/8001端口"
fi

echo ""
echo "📋 6. 检查日志文件"
if [ -f "frontend.log" ]; then
    echo "=== 前端日志最后10行 ==="
    tail -10 frontend.log
else
    echo "❌ 前端日志文件不存在"
fi

if [ -f "backend/backend.log" ]; then
    echo ""
    echo "=== 后端日志最后10行 ==="
    tail -10 backend/backend.log
else
    echo "❌ 后端日志文件不存在"
fi

echo ""
echo "🔧 7. 尝试修复服务"
echo "停止现有服务..."
pkill -f vite 2>/dev/null || echo "没有vite进程需要停止"
pkill -f uvicorn 2>/dev/null || echo "没有uvicorn进程需要停止"

# 清理端口
lsof -ti:3000 | xargs kill -9 2>/dev/null || echo "端口3000已清理"
lsof -ti:8001 | xargs kill -9 2>/dev/null || echo "端口8001已清理"

sleep 3

echo ""
echo "启动后端服务（绑定到0.0.0.0:8001）..."
nohup python3 -m uvicorn backend.main:app --host 0.0.0.0 --port 8001 --reload > backend/backend.log 2>&1 &
sleep 3

echo "启动前端服务（绑定到0.0.0.0）..."
cd frontend
nohup npm run dev -- --host 0.0.0.0 --port 3000 > ../frontend.log 2>&1 &
sleep 3

cd $PROJECT_PATH

echo ""
echo "📋 8. 验证修复结果"
echo "=== 新的端口监听状态 ==="
ss -tlnp | grep -E ':(3000|8001)'

echo ""
echo "=== 测试本地连接 ==="
curl -I http://localhost:3000 2>/dev/null && echo "✅ 前端服务正常" || echo "❌ 前端服务异常"
curl -I http://localhost:8001 2>/dev/null && echo "✅ 后端服务正常" || echo "❌ 后端服务异常"

echo ""
echo "📋 9. 检查运行进程"
ps aux | grep -E '(vite|uvicorn)' | grep -v grep

echo ""
echo "=== 诊断完成 ==="
echo "如果服务正常启动，请在外部测试访问："
echo "前端: http://8.130.47.217:3000"
echo "后端: http://8.130.47.217:8001"
echo ""
echo "如果仍无法访问，可能是阿里云安全组配置问题。"